#ifndef __LINKTREE_H_
#define __LINKTREE_H_
#define ElementType struct UniversalType

enum Type//枚举类型定义
{
    charPoint,
    intPoint,
    structPoint
};

struct UniversalType
{
    void * value;
    enum Type type;
};

struct LinkTreeNode
{
    ElementType data;//表示节点中存储的数据。
    struct LinkTreeNode *firstChild;//表示节点的第一个子节点。
    struct LinkTreeNode *nextSibling;//表示节点的下一个兄弟节点。
    struct LinkTreeNode *parent;//示节点的父节点。
};

typedef struct LinkTreeNode LTNode;
LTNode *CreateTreeNode(ElementType element);//创建一个新的LinkTreeNode节点，并将其中的data成员设置为给定的element参数的值。函数返回一个指向新创建的节点的指针。
void ConnectBranch(LTNode *parent,LTNode *child);//函数将child节点连接到parent节点的子节点链表中。
void DisConnectBranch(LTNode *parent,LTNode *child);//用于从parent节点的子节点链表中断开一个LinkTreeNode节点child
void FreeNode(LTNode * treeNode);//用于释放一个LinkTreeNode节点及其子节点的内存空间，包括递归地释放子节点的内存空间。

struct LinkTree
{
    LTNode *root;
};

typedef struct LinkTree LTree;

int InitLTree(LTree *tree);
void FreeTree(LTree *tree);
int GetTreeHeight(LTree *tree);//函数用于获取LTree树的高度，即树中节点的最大层数
LTNode* FindTreeNode(LTree *node,ElementType element, int(*func)(ElementType,ElementType));//在LTree树中查找值为element的节点。
void Travel(LTree *tree,void(*func)(ElementType));//遍历LTree树中的所有节点




#endif
